1
Императив производительности
AI031Lesson 5
00:00

Современная оптимизация — это партнерство между выбором алгоритмов высокого уровня и пониманием работы аппаратного обеспечения на низком уровне. В то время как асимптотическая эффективность определяет теоретические границы, а императив производительности требует от нас решать константные факторы которые компиляторы не могут обработать самостоятельно.

1. Иерархия оптимизации

Успех следует линейному процессу: во-первых, устраните асимптотическую неэффективность (например, $O(N^2) \to O(N)$). Далее — решайте препятствия оптимизации— в первую очередь алиасинг памяти и накладные расходы при вызове процедур (например, постоянная проверка границ в функции get_vec_element).

2. Поток данных и ограничения

Компиляторы действуют осторожно ради безопасности; они не будут оптимизировать код, если указатель *dest может пересекаться с вектором data. Мы измеряем реальную скорость выполнения посредством циклов на элемент (CPE). Производительность часто моделируется с помощью коэффициентов масштабирования, таких как $\alpha = 0.974$, где накладные расходы смещают кривую выполнения (например, $209/\alpha = 39.0$).

150100500Линейный нижний пределУлучшенная хеш-таблицаБольшая таблицаБыстрая сортировкаИсходныйЛинейныйНижний пределУлучшеннаяХеш-таблицаБольшаяТаблицаБыстрая сортировкаИсходныйАсимптотический узкий участокРисунок 5.38(а): Масштабирование производительности для n-грамм (секунды ЦП)

3. Реальности аппаратного обеспечения

Оптимизация требует понимания единицы завершения (Retirement Unit) и критического пути. Даже простые циклы ограничены ограничением пропускной способности функциональных блоков или ограничением задержки цепочек зависимостей.

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>